package org.teemor.demo.zookeeper.factory;

import org.apache.curator.RetryPolicy;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.retry.ExponentialBackoffRetry;

/**
 * @Description:
 * @author zhoulk
 * @date: 2020/2/19
 */
public class ClientFactory {

    /**
     * 简单的创建一个实例的方法
     * @param connectionStr
     * @return
     */
    public static CuratorFramework createSimple(String connectionStr) {
        /**
         * 重试策略：第一次重试等待 1s ，第二次重试等待 2s，第三次重试等待 4s
         * 第一个参数：等待时间的基础单位，单位为毫秒
         * 第二个参数：最大重试次数
         */
        ExponentialBackoffRetry retry = new ExponentialBackoffRetry(1000, 3);

        /**
         * 获取 CuratorFramework 实例的最简单方式
         * 第一个参数：zk 的连接地址
         * 第二个参数：重试策略
         */
        return CuratorFrameworkFactory.newClient(connectionStr, retry);
    }

    /**
     * @Description: 根据参数创建 CuratorFramework实例
     *
     * @param: connectionStr 连接地址
     * @param: retryPolicy 重试策略
     * @param: connectionTimeoutMs 连接超时时间
     * @param: sessionTimeoutMs 会话超时时间
     * @return: org.apache.curator.framework.CuratorFramework 实例
     *       
     */
    public static CuratorFramework createWithOptions(String connectionStr, RetryPolicy retryPolicy, int connectionTimeoutMs, int sessionTimeoutMs) {
        return CuratorFrameworkFactory.builder()
                .connectString(connectionStr)
                .retryPolicy(retryPolicy)
                .connectionTimeoutMs(connectionTimeoutMs)
                .sessionTimeoutMs(sessionTimeoutMs) //可以继续设置其它选项
                .build();
    }
}
